#include "complex.h"
#include <stdio.h>

//写一个函数实现从键盘上获取数据对一个复数进行赋值 
struct Complex complex_input_data_1()
{
    struct Complex c;
    scanf("%d%d", &c.real, &c.img);

    return c;
}
void complex_input_data_2(struct Complex*c)
{
    //scanf("%d%d", &(*c).real, &(*c).img);
    scanf("%d%d",&c->real,&c->img);
    
}
/*
    写一个函数实现两个复数的加法
    加法规则：
        设z1=a+bi，z2=c+di是任意两个复数，
        则它们的和是 (a+bi)+(c+di)=(a+c)+(b+d)i。
    complex_add: 实现两个复数的加法
    @c1 :
    @c2 :

    返回值：
        相加之后的复数
*/
struct Complex complex_add(struct Complex c1, struct Complex c2)
{
    printf("加法:\n");
    struct Complex c;
    c.real = c1.real + c2.real;
    c.img = c1.img + c2.img;

    return c;
}

/*
    写一个函数实现两个复数的减法
	减法规则：
			设z1=a+bi，z2=c+di是任意两个复数，
			则它们的差是 (a+bi)-(c+di)=(a-c)+(b-d)i。
    complex_sub: 实现两个复数的减法
    @c1 :
    @c2 :

    返回值：
        相减之后的复数
*/
struct Complex complex_sub(struct Complex c1, struct Complex c2)
{
    printf("减法:\n");
    struct Complex c;
    c.real = c1.real - c2.real;
    c.img = c1.img - c2.img;

    return c;
}
/*
    写一个函数实现两个复数的乘法
    乘法规则：
        设z1=a+bi，z2=c+di是任意两个复数，
        那么它们的积(a+bi)(c+di)=(ac-bd)+(bc+ad)i。
    complex_mul: 实现两个复数的乘法
    @c1 :
    @c2 :

    返回值：
        相乘之后的复数
*/
struct Complex complex_mul(struct Complex c1, struct Complex c2)
{
    printf("乘法:\n");
    struct Complex c;
    c.real = c1.real*c2.real - c1.img*c2.img;
    c.img = c1.img*c2.real + c1.real*c2.img;

    return c;
}
/*
    写一个函数实现两个复数的除法
    除法规则：
        设z1=a+bi，z2=c+di是任意两个复数
        那么它们的商(a+bi)/(c+di)=(ac+bd)/(c2+d2) +((bc-ad)/(c2+d2))i。
    complex_div: 实现两个复数的除法
    @c1 :
    @c2 :

    返回值：
        相除之后的复数
*/
struct Complex complex_div(struct Complex c1, struct Complex c2)
{
    printf("除法:\n");
    struct Complex c;
    //实部
    if(c2.real*c2.real+c2.img*c2.img == 0)
        c.real = 0;
    else
       c.real =  (c1.real*c2.real+c1.img*c2.img)/(c2.real*c2.real+c2.img*c2.img);

    //虚部
    if(c2.real*c2.real+c2.img*c2.img == 0)
        c.img = 0;
    else
        c.img = (c1.img*c2.real-c1.real*c2.img)/(c2.real*c2.real+c2.img*c2.img);
   

    return c;
}

/*
    写一个函数实现输出一个复数
*/
void Print_complex(struct Complex c)
{
    if(c.img >= 0)
    {
        printf("%d+%di\n", c.real, c.img);
    }
    else 
    {
        printf("%d%di\n", c.real, c.img);
    }

   
}